package net.alan.modules.service;

import net.alan.modules.bean.PageModel;
import net.alan.modules.bean.Result;
import net.alan.modules.handle.BaseExecption;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;

import java.io.Serializable;
import java.util.List;

/**
 * Author 李岩飞
 * Email eliyanfei@126.com
 * 2017/11/21
 */
public interface IBaseService {
    <T> T getById(Class<? extends T> cla, Serializable id);

    /**
     * 根据类名获取相应的Jpa
     *
     * @return
     */
    JpaRepository getJpaRepository(Class<?> cla);

    /**
     * 分页查询数据
     *
     * @param pageModel
     * @return
     */
    Page findAll(Class<?> cla, PageModel pageModel);

    /**
     * 带排序的查询
     *
     * @param pageModel
     * @param direction
     * @param field
     * @return
     */
    Page findAll(Class<?> cla, PageModel pageModel, Sort.Direction direction, String field);

    /**
     * 查询所有数据，不分页
     * @param cla
     * @param <T>
     * @return
     */
    <T> List<T> findAll(Class<T> cla);

    /**
     * 保存数据
     *
     * @param obj
     */
    void save(Class<?> cla,Object obj) throws BaseExecption;

    /**
     * 修改数据
     *
     * @param obj
     */
    void update(Class<?> cla,Object obj) throws BaseExecption;

    /**
     * 删除数据
     *
     * @param id
     */
    Result delete(Class<?> cla, Integer id) throws BaseExecption;

    long count(Class<?> cla);
}
